﻿using UnityEngine;
using System.Collections;

public class Bullet : MonoBehaviour, IAttacker
{
	// Properties

	[SerializeField]
	float			m_lifeTime	= 1f;		// 총알 유효시간
	[SerializeField]
	float			m_damage;
	[SerializeField]
	float			m_attackForce;
	[SerializeField]
	bool			m_overrideFromChar;		// 캐릭터한테서 정보 오버라이드



	// Members

	Faction			m_faction;				// 총알이 속한 세력

	public float damage
	{
		get
		{
			return m_damage;
		}
	}

	public float attackForce
	{
		get
		{
			return m_attackForce;
		}
	}

	public Faction faction
	{
		get
		{
			return m_faction;
		}
	}

	public virtual bool validAttacker
	{
		get
		{
			return true;
		}
	}


	/// <summary>
	/// 총알 발사
	/// </summary>
	public void Shoot(BaseCharacter character, Vector2 direction)
	{
		if(m_overrideFromChar)								// * 설정한 경우 캐릭터한테서 데미지 등 정보 가져옴
		{
			m_damage		= character.damage;
			m_attackForce	= character.attackForce;
		}
		m_faction	= character.faction;					// 세력 설정

		direction.Normalize();								// 노멀라이즈
		rigidbody2D.AddForce(direction * m_attackForce);	// 물리력 뿅

		Object.Destroy(gameObject, m_lifeTime);				// 일정 시간 후에 폭파
	}

	/// <summary>
	/// 공격이 맞았을 때
	/// </summary>
	/// <param name="target">Target.</param>
	public virtual void OnHit(IVulnerable target)
	{
		GameObject.Destroy(gameObject);						// 총알 파괴
	}

	void OnCollisionEnter2D(Collision2D collision)
	{
		if(collision.gameObject.layer == LayerMask.NameToLayer("Obstacle"))			// 장애물에 부딪친거면 그냥 파괴
		{
			Destroy (gameObject);
		}
	}
}


